package plan;

import java.util.HashMap;

public class DistanceMatrix {
	private HashMap<String, HashMap<String, Integer>> mDistanceMatrix = new HashMap<String, HashMap<String, Integer>>();
	
	public int getDistance(String s){
		int distance = 0;
		for(int i = 0; i< s.length()-1;i++){
			distance += getDistance(s.substring(i, i+1), s.substring(i+1, i+2));
		}
		distance += getDistance(s.substring(s.length()-1, s.length()), s.substring(0, 1));
		return distance;
	}
	
	public HashMap<String, Integer> getDistancesFromCity(String s){
		return mDistanceMatrix.get(s);
	}
	
	public int getDistance(String a, String b){
		return mDistanceMatrix.get(a).get(b);
	}
	
	public void put(String s, HashMap<String, Integer> hm){
		mDistanceMatrix.put(s, hm);
	}
	
	public static DistanceMatrix createDM(){
		DistanceMatrix d =  new DistanceMatrix();
		HashMap<String, Integer> h;
		//New York
		h = new HashMap<String, Integer>();
		h.put("B", 2457);
		h.put("C", 712);
		h.put("D", 1433);
		h.put("E", 66);
		
		h.put("F", 2141);
		h.put("G", 1592);
		h.put("H", 2431);
		h.put("I", 1366);
		h.put("J", 2546);
		
		h.put("K", 843);
		h.put("L", 644);
		h.put("M", 2569);
		h.put("N", 1507);
		h.put("O", 470);
		
		h.put("P", 1394);
		h.put("Q", 540);
		h.put("R", 496);
		d.put("A", h);
		
		//LA
		h = new HashMap<String, Integer>();
		h.put("A", 2457);
		h.put("C", 1752);
		h.put("D", 1374);
		h.put("E", 2409);
		
		h.put("F", 365);
		h.put("G", 1223);
		h.put("H", 124);
		h.put("I", 1246);
		h.put("J", 291);
		
		h.put("K", 2152);
		h.put("L", 1817);
		h.put("M", 334);
		h.put("N", 1235);
		h.put("O", 1992);
		
		h.put("P", 1219);
		h.put("Q", 2122);
		h.put("R", 1973);
		d.put("B", h);
		
		//Chicago
		h = new HashMap<String, Integer>();
		h.put("A", 712);
		h.put("B", 1752);
		h.put("D", 954);
		h.put("E", 672);
		
		h.put("F", 1452);
		h.put("G", 1068);
		h.put("H", 1734);
		h.put("I", 794);
		h.put("J", 1834);
		
		h.put("K", 867);
		h.put("L", 167);
		h.put("M", 1857);
		h.put("N", 973);
		h.put("O", 284);
		
		h.put("P", 817);
		h.put("Q", 589);
		h.put("R", 220);
		d.put("C", h);	
		
		//Houston
		h = new HashMap<String, Integer>();
		h.put("A", 1433);
		h.put("B", 1374);
		h.put("C", 954);
		h.put("E", 1368);
		
		h.put("F", 1010);
		h.put("G", 177);
		h.put("H", 1291);
		h.put("I", 242);
		h.put("J", 1595);
		
		h.put("K", 829);
		h.put("L", 878);
		h.put("M", 1634);
		h.put("N", 139);
		h.put("O", 1010);
		
		h.put("P", 246);
		h.put("Q", 933);
		h.put("R", 1102);
		d.put("D", h);	
		
		//Philadelphia
		h = new HashMap<String, Integer>();
		h.put("A", 66);
		h.put("B", 2409);
		h.put("C", 672);
		h.put("D", 1368);
		
		h.put("F", 2090);
		h.put("G", 1529);
		h.put("H", 2381);
		h.put("I", 1305);
		h.put("J", 2505);
		
		h.put("K", 779);
		h.put("L", 593);
		h.put("M", 2528);
		h.put("N", 1445);
		h.put("O", 418);
		
		h.put("P", 1334);
		h.put("Q", 473);
		h.put("R", 461);
		d.put("E", h);	
		
		//Phoenix
		h = new HashMap<String, Integer>();
		h.put("A", 2141);
		h.put("B", 365);
		h.put("C", 1452);
		h.put("D", 1010);
		h.put("E", 2090);
		
		h.put("G", 861);
		h.put("H", 298);
		h.put("I", 885);
		h.put("J", 603);
		
		h.put("K", 1791);
		h.put("L", 1498);
		h.put("M", 645);
		h.put("N", 871);
		h.put("O", 1672);
		
		h.put("P", 857);
		h.put("Q", 1776);
		h.put("R", 1670);
		d.put("F", h);
		
		//San Antonio
		h = new HashMap<String, Integer>();
		h.put("A", 1592);
		h.put("B", 1223);
		h.put("C", 1068);
		h.put("D", 177);
		h.put("E", 1529);
		
		h.put("F", 861);
		h.put("H", 1133);
		h.put("I", 282);
		h.put("J", 1457);
		
		h.put("K", 1006);
		h.put("L", 1012);
		h.put("M", 1497);
		h.put("N", 95);
		h.put("O", 1156);
		
		h.put("P", 267);
		h.put("Q", 1104);
		h.put("R", 1235);
		d.put("G", h);
		
		//San Diego
		h = new HashMap<String, Integer>();
		h.put("A", 2431);
		h.put("B", 124);
		h.put("C", 1734);
		h.put("D", 1291);
		h.put("E", 2381);
		
		h.put("F", 298);
		h.put("G", 1133);
		h.put("I", 1180);
		h.put("J", 415);
		
		h.put("K", 2085);
		h.put("L", 1788);
		h.put("M", 458);
		h.put("N", 1153);
		h.put("O", 1963);
		
		h.put("P", 1151);
		h.put("Q", 2074);
		h.put("R", 1954);
		d.put("H", h);
		
		//Dallas
		h = new HashMap<String, Integer>();
		h.put("A", 1366);
		h.put("B", 1246);
		h.put("C", 794);
		h.put("D", 242);
		h.put("E", 1305);
		
		h.put("F", 885);
		h.put("G", 282);
		h.put("H", 1180);
		h.put("J", 1438);
		
		h.put("K", 906);
		h.put("L", 755);
		h.put("M", 1474);
		h.put("N", 188);
		h.put("O", 911);
		
		h.put("P", 30);
		h.put("Q", 920);
		h.put("R", 973);
		d.put("I", h);
		
		//San Jose
		h = new HashMap<String, Integer>();
		h.put("A", 2546);
		h.put("B", 291);
		h.put("C", 1834);
		h.put("D", 1595);
		h.put("E", 2505);
		
		h.put("F", 603);
		h.put("G", 1457);
		h.put("H", 415);
		h.put("I", 1438);
		
		h.put("K", 2334);
		h.put("L", 1923);
		h.put("M", 43);
		h.put("N", 1457);
		h.put("O", 2094);
		
		h.put("P", 1413);
		h.put("Q", 2265);
		h.put("R", 2052);
		d.put("J", h);

		//Jacksonville
		h = new HashMap<String, Integer>();
		h.put("A", 843);
		h.put("B", 2152);
		h.put("C", 867);
		h.put("D", 829);
		h.put("E", 779);
		
		h.put("F", 1791);
		h.put("G", 1006);
		h.put("H", 2085);
		h.put("I", 906);
		h.put("J", 2334);
		
		h.put("L", 700);
		h.put("M", 2368);
		h.put("N", 954);
		h.put("O", 670);
		
		h.put("P", 934);
		h.put("Q", 340);
		h.put("R", 831);
		d.put("K", h);
		
		//Indianapolis
		h = new HashMap<String, Integer>();
		h.put("A", 644);
		h.put("B", 1817);
		h.put("C", 167);
		h.put("D", 878);
		h.put("E", 593);
		
		h.put("F", 1498);
		h.put("G", 1012);
		h.put("H", 1788);
		h.put("I", 755);
		h.put("J", 1923);
		
		h.put("K", 700);
		h.put("M", 1948);
		h.put("N", 919);
		h.put("O", 175);
		
		h.put("P", 781);
		h.put("Q", 427);
		h.put("R", 225);
		d.put("L", h);

		//San Francisco
		h = new HashMap<String, Integer>();
		h.put("A", 2569);
		h.put("B", 334);
		h.put("C", 1857);
		h.put("D", 1634);
		h.put("E", 2528);
		
		h.put("F", 645);
		h.put("G", 1497);
		h.put("H", 458);
		h.put("I", 1474);
		h.put("J", 43);
		
		h.put("K", 2368);
		h.put("L", 1948);
		h.put("N", 1495);
		h.put("O", 2119);
		
		h.put("P", 1449);
		h.put("Q", 2295);
		h.put("R", 2074);
		d.put("M", h);
		
		//Austin
		h = new HashMap<String, Integer>();
		h.put("A", 1507);
		h.put("B", 1235);
		h.put("C", 973);
		h.put("D", 139);
		h.put("E", 1445);
		
		h.put("F", 871);
		h.put("G", 95);
		h.put("H", 1153);
		h.put("I", 188);
		h.put("J", 1457);
		
		h.put("K", 954);
		h.put("L", 919);
		h.put("M", 1495);
		h.put("O", 1066);
		
		h.put("P", 174);
		h.put("Q", 1029);
		h.put("R", 1141);
		d.put("N", h);
		
		//Columbus
		h = new HashMap<String, Integer>();
		h.put("A", 470);
		h.put("B", 1992);
		h.put("C", 284);
		h.put("D", 1010);
		h.put("E", 418);
		
		h.put("F", 1672);
		h.put("G", 1156);
		h.put("H", 1963);
		h.put("I", 911);
		h.put("J", 2094);
		
		h.put("K", 670);
		h.put("L", 175);
		h.put("M", 2119);
		h.put("N", 1066);
		
		h.put("P", 939);
		h.put("Q", 346);
		h.put("R", 161);
		d.put("O", h);
		
		//Fort Worth
		h = new HashMap<String, Integer>();
		h.put("A", 1394);
		h.put("B", 1219);
		h.put("C", 817);
		h.put("D", 246);
		h.put("E", 1334);
		
		h.put("F", 857);
		h.put("G", 267);
		h.put("H", 1151);
		h.put("I", 30);
		h.put("J", 1413);
		
		h.put("K", 934);
		h.put("L", 781);
		h.put("M", 1449);
		h.put("N", 174);
		h.put("O", 939);
		
		h.put("Q", 950);
		h.put("R", 998);
		d.put("P", h);
		
		//Charlotte
		h = new HashMap<String, Integer>();
		h.put("A", 540);
		h.put("B", 2122);
		h.put("C", 589);
		h.put("D", 933);
		h.put("E", 473);
		
		h.put("F", 1776);
		h.put("G", 1104);
		h.put("H", 2074);
		h.put("I", 920);
		h.put("J", 2265);
		
		h.put("K", 340);
		h.put("L", 427);
		h.put("M", 2295);
		h.put("N", 1029);
		h.put("O", 346);
		
		h.put("P", 950);
		h.put("R", 506);
		d.put("Q", h);
		
		//Detroit
		h = new HashMap<String, Integer>();
		h.put("A", 496);
		h.put("B", 1973);
		h.put("C", 220);
		h.put("D", 1102);
		h.put("E", 461);
		
		h.put("F", 1670);
		h.put("G", 1235);
		h.put("H", 1954);
		h.put("I", 973);
		h.put("J", 2052);
		
		h.put("K", 831);
		h.put("L", 225);
		h.put("M", 2074);
		h.put("N", 1141);
		h.put("O", 161);
		
		h.put("P", 998);
		h.put("Q", 506);
		d.put("R", h);
		
		return d;
	}
}
